home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Applications / Newswatcher 2.0b22 / NW Source / Source / glob.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-07  |  33.2 KB  |  841 lines  |  [TEXT/MMCC]

  1. /*----------------------------------------------------------------------------
  2.  
  3.     glob.h
  4.  
  5.     This file contains global constant, type, and variable definitions.
  6.     
  7.     Copyright © 1994, Northwestern University.
  8.  
  9. ----------------------------------------------------------------------------*/
  10.  
  11. #include <Aliases.h>
  12.  
  13. #include "def.h"
  14.  
  15.  
  16.  
  17. /* Constants. */
  18.  
  19. /*#define kDevelopmentVersion    1*/            /* comment out this line for the release version */
  20.  
  21. #define kLDEFProc            128            /* resource id of our custom LDEF */
  22.  
  23. #define kTextMargin            4            /* pixel margin for all text windows */
  24.  
  25. #define kNewsWatcherSignature            'NNTP'        /* NewsWatcher's signature */
  26. #define kSavedUserGroupListFileType        'NEWS'        /* user group list file type */
  27. #define kSavedMessageFileType            'TEXT'        /* saved message file type */
  28. #define kPrefsFileType                    'PREF'        /* preferences file type */
  29.  
  30. #define kOpenTypeList        "NEWSTEXT"    /* list of file types we can open */
  31. #define kNumOpenTypeList    2            /* number of file types we can open */
  32.  
  33. #define kuuUndoCreatorType                'uuUN'
  34. #define kExpanderCreatorType            'SITx'
  35.  
  36. #define kGetURLEventClass                'GURL'
  37. #define kGetURLEventID                    'GURL'
  38. #define kGetURLToFileKeyword            'dest'
  39.  
  40.  
  41. /* Strings in STR# id=128 resource. */
  42.  
  43. #define kStringResourceID        128
  44.  
  45. #define kStrVersion                                1
  46. #define kStrTabStops                            2
  47. #define kStrAboutWindTitle                        3
  48. #define kStrServerInfoWindTitle                    4
  49. #define kStrMemoryLow                            5
  50. #define kStrCancelingNofMStatusMsg                6
  51. #define kStrSectionMessageFormat                7
  52. #define kStrNoneOpened                            8
  53. #define kStrSomeNotOpened                        9
  54. #define kStrNoRefs                                10
  55. #define kStrPrefsFileName                        11
  56. #define kStrArticleNotFound                        12
  57. #define kStrFrom                                13
  58. #define kStrOrg                                    14
  59. #define kStrDate                                15
  60. #define kStrNewsgroups                            16
  61. #define kStrArticleXofY                            17
  62. #define kStrCancelingStatusMsg                    18
  63. #define kStrNotCanceled                            19
  64. #define kStrNoMsgID                                20
  65. #define kStrLostConnection                        21
  66. #define kStrCantGetAddress                        22
  67. #define kStrCantOpenConnection                    23
  68. #define kStrOutOfMemory                            24
  69. #define kStrNewsServerErrorConnect                25
  70. #define kStrNewsServerErrorCommand                26
  71. #define kStrSortingStatusMsg                    27
  72. #define kStrReadingStatusMsg                    28
  73. #define kStrCheckingNewStatusMsg                29
  74. #define kStrCheckingDelStatusMsg                30
  75. #define kStrScrapTooBig                            31
  76. #define kStrNoDelGroups                            32
  77. #define kStrGetFullStatusMsg                    33
  78. #define kStrNewGroups                            34
  79. #define kStrFullGroupList                        35
  80. #define kStrSelGroupNoUnread                    36
  81. #define kStrSelGroupNoArt                        37
  82. #define kStrNoneUnread                            38
  83. #define kStrNoArts                                39
  84. #define kStrUntitled                            40
  85. #define kStrOneGroup                            41
  86. #define kStrNGroups                                42
  87. #define kStrShowFullGroupList                    43
  88. #define kStrHideFullGroupList                    44
  89. #define kStrShowHeader                            45
  90. #define kStrHideHeader                            46
  91. #define kStrQuoteStr1                            47
  92. #define kStrQuoteStr2                            48
  93. #define kStrQuoteStr3                            49
  94. #define kStrByWayOfFmt                            50
  95. #define kStrNoSubject                            51
  96. #define kStrOneNotCanceled                        52
  97. #define kStrTo                                    53
  98. #define kStrSubject                                54
  99. #define kStrCc                                    55
  100. #define kStrBcc                                    56
  101. #define kStrReplyto                                57
  102. #define kStrFollowupto                            58
  103. #define kStrKeywords                            59
  104. #define kStrDistribution                        60
  105. #define kStrExtraNewsHeaderLines                61
  106. #define kStrExtraMailHeaderLines                62
  107. #define kStrSignature                            63
  108. #define kStrPostOKMailErr                        64
  109. #define kStrTooManyGroups                        65
  110. #define kStrTrunc                                66
  111. #define kStrURLHelperNotFound                    67
  112. #define kStrURLHelperNoMem                        68
  113. #define kStrScrapTooBigMaxIs32767                69
  114. #define kStrNoMoreChars                            70
  115. #define kStrChecking                            71
  116. #define kStrOpeningConnectionStatusMsg            72    
  117. #define kStrServerInfoFmt                        73
  118. #define kStrURLHelperUnexpectedErr                74
  119. #define kStrSyntaxErr                            75
  120. #define kStrNotInFullGroupList                    76    
  121. #define kStrGroupDeletedOnServer                77
  122. #define kStrMissingGroupName                    78
  123. #define kStrCheckingForNewArticlesStatusMsg        79
  124. #define kStrQuoteString                            80
  125. #define kStrDirFull                                81
  126. #define kStrGettingGroupListFromHostStatusMsg    82
  127. #define kStrGetFromHostWindowTitle                83
  128. #define kStrNoneCanceled                        84
  129. #define kStrSaveGroupListAs                        85
  130. #define kStrSendingGroupListToHostStatusMsg        86
  131. #define kStrSizeofTPrefRecBadFmt                87
  132. #define kStrOpeningMacTCPStatusMsg                88
  133. #define kStrCouldNotOpenMacTCP                    89
  134. #define kStrStartupError                        90
  135. #define kStrOldPrefsFileName                    91
  136. #define kStrReallyOldPrefsFileName                92
  137. #define kStrDiskFull                            93
  138. #define kStrPersonalNWFolder                    94
  139. #define kStrCantFindDefaultURLHelper            95
  140. #define kStrUnexpectedErr                        96
  141. #define kStrDefaultTextFileOwner                97
  142. #define kStrDefaultNewsrcFileName                98
  143. #define kStrPrintingSample                        99
  144. #define kStrGroupSubjectSample                    100    
  145. #define kStrArtMsgSample                        101    
  146. #define kStrMustRestart                            102    
  147. #define kStrPrintNoPagesInRange                    103
  148. #define kStrSaveArticlePrompt                    104    
  149. #define kStrSaveMessagePrompt                    105
  150. #define kStrDiskIOErr                            106
  151. #define kStrDefaultSearchHdr                    107
  152. #define kStrSearchingStatusMsg                    108
  153. #define kStrNoMatches                            109
  154. #define kStrSearchWindowTitle                    110
  155. #define kStrMustCheckAnIcon                        111
  156. #define kStrMustSupplySubject                    112
  157. #define kStrMustSupplyNewsgroup                    113
  158. #define kStrMustSupplyRecipient                    114
  159. #define kStrPostingMessageStatusMsg                115
  160. #define kStrMailingMessageStatusMsg                116
  161. #define kStrFolderSelectNothing                    117
  162. #define kStrFolderSelectFmt                        118
  163. #define kStrStatusWindowTitle                    119    
  164. #define kStrHelperTooOld                        120
  165. #define kStrStatusCancelButtonName                121
  166. #define kStrLogFileName                            122
  167. #define kStrGettingSubjectsAndAuthorsStatusMsg    123
  168. #define kStrGetSubjectsStatusMsg                124
  169. #define kStrSelArticleDoesntExist                125
  170. #define kStrNoneExist                            126
  171. #define kStrSomeDontExist                        127
  172. #define kStrOneArt                                128
  173. #define kStrNArts                                129
  174. #define kStrSomeGroupsNotInFullGroupList        130
  175. #define kStrDragTextTooBig                        131
  176. #define kStrDragTextBadChar                        132
  177. #define kStrDamagedCache                        133
  178. #define kStrFileLockedOrBusy                    134
  179. #define kStrLogOpenMsg                            135
  180. #define kStrNewsWatcherVersion                    136
  181. #define kStrLogLegend                            137
  182. #define kStrLogCantOpen                            138
  183. #define kStrLogClosed                            139
  184. #define kStrScrapBadChar                        140
  185. #define kStrNoMoreTyping                        141
  186. #define kStrDelGroupsWindTitle                    142
  187. #define kStrNews                                143
  188. #define kStrMail                                144
  189. #define kStrFTP                                    145
  190. #define kStrVolLocked                            146
  191. #define kStrNNotCanceled                        147
  192. #define kStrNewsWatcher                            148
  193. #define kStrGettingAndSavingArticle                149
  194. #define kStrGettingAndSavingArticleNofM            150
  195. #define kStrDefaultArtFoldNotFound                151
  196. #define kStrDefaultMsgFoldNotFound                152
  197. #define kStrMessageBodyTruncated                153
  198. #define kStrMessageFieldTruncated                154
  199. #define kStrHqxDecodeHelperName                    155
  200. #define kStrDownloadFoldNotFound                156
  201. #define kStrDownloadTempFilePrefix                157
  202. #define kStrDownloadTempFilePrompt                158
  203. #define kStrGettingAndSavingFile                159
  204. #define kStrGettingAndSavingPartNofM            160
  205. #define kStrCantFindDecodeHelper                161
  206. #define kStrDecodeHelperNoMem                    162
  207. #define kStrDecodeHelperUnexpectedErr            163
  208. #define kStrDecodePartsMissing                    164
  209. #define kStrGettingAndSavingArtAofBPartNofM        165
  210. #define kStrArtHasNoAttachedFile                166
  211. #define kStrAllSelectedArtsHaveMissingParts        167
  212. #define kStrOneArtSkippedNoAttachedFile            168
  213. #define kStrNArtsSkippedNoAttachedFile            169
  214. #define kStrOneArtSkippedMissingParts            170
  215. #define kStrNArtsSkippedMissingParts            171
  216. #define kStrExtractBinariesManuallyDlgLabel        172
  217. #define kStrExtractBinariesManuallyTooMuchCellData    173
  218. #define kStrTempFileName                        174
  219. #define kStrBadScrapData                        175
  220. #define kStrDuplicateGroups                        176
  221. #define kStrOneDuplicateGroup                    177
  222. #define kStrMoving                                178
  223. #define kStrPasting                                179
  224. #define kStrDragTextTooBigMaxIs32767            180
  225. #define kStrGroupDragTooBigMaxIs32767            181
  226. #define kStrDiskWriteProtected                    182
  227. #define kStrArtNotOnServer                        183
  228. #define kStrOneArtSkippedNotOnServer            184
  229. #define kStrNArtsSkippedNotOnServer                185
  230. #define kStrUUDecodeHelperName                    186
  231. #define kStrPrinting                            187
  232. #define kStrGettingAndPrinting                    188
  233. #define kStrGettingAndPrintingNofM                189
  234. #define kStrPrintedFor                            190
  235. #define kStrSaveTextFilePrompt                    191
  236. #define kStrNoNewsgroupsHeader                    192
  237. #define kStrTooManySubjects                        193
  238. #define kStrTooManyPrefsFileGroups                194
  239. #define kStrTooManyGroupsOnServer                195
  240. #define kStrBadPrefs                            196
  241. #define kStrDamagedPrefsFileName                197
  242. #define kStrPrintNoDriver                        198
  243. #define kStrNoPrinterSelected                    199
  244. #define kStrNntpURLSyntaxError                    200
  245. #define kStrAddingInitialSubscribedGroups        201
  246. #define kStrFloppyLocked                        202
  247. #define kStrFloppyEraseFailed                    203
  248. #define kStrNameSyntaxError                        204
  249. #define kStrArticleOrGroupNotFound                205
  250. #define kStrURLSyntaxError                        206
  251. #define kStrNotAnApplication                    207
  252. #define kStrDesktopDatabaseDamaged                208
  253. #define kStrDuplicateCopiesOfHelper                209
  254. #define kStrMustRestartIC                        210
  255.  
  256.  
  257.  
  258. /* Types. */
  259.  
  260. typedef enum TWindowKind {
  261.     kGroup,                        /* group list window */
  262.     kSubject,                    /* subject list window */
  263.     kArticle,                    /* article window */
  264.     kMessage,                    /* message window */
  265.     kText,                        /* text window */
  266.     kStatus,                    /* status window */
  267.     kDialog,                    /* modal dialog window */
  268.     kDummy,                        /* dummy window */
  269.     kNotOurWind                    /* no window, or DA window */
  270. } TWindowKind;
  271.  
  272. #define kNumWindowKind kNotOurWind    /* number of window kinds */
  273.  
  274. typedef enum TGroupWindowKind {
  275.     kFullGroup,                    /* full group list window */
  276.     kNewGroup,                    /* new groups list window */
  277.     kUserGroup                    /* user group list window */
  278. } TGroupWindowKind;
  279.  
  280. typedef enum TAttachedFileKind {
  281.     kNoAttachedFile,            /* no attached file */
  282.     kArtNotOnServer,            /* article or part no longer on server */
  283.     kBinHex,                    /* BinHex */
  284.     kUUEncode                    /* uuencode */
  285. } TAttachedFileKind;
  286.  
  287. typedef enum TURLKind {
  288.     kNotURL,
  289.     kMailtoURL,
  290.     kNewsURL,
  291.     kNntpURL,
  292.     kFtpURL,
  293.     kHttpURL,
  294.     kGopherURL,
  295.     kWaisURL,
  296.     kTelnetURL,
  297.     kTn3270URL,
  298.     kFingerURL,
  299.     kWhoisURL
  300. } TURLKind;
  301.  
  302. typedef struct TURLHelperInfo {
  303.     OSType sig;                            /* signature of helper program */
  304.     unsigned long versionNumber;        /* version number */
  305.     unsigned long lastMod;                /* last mod date/time */
  306. } TURLHelperInfo, *TURLHelperInfoPtr;
  307.  
  308. typedef struct TDispatch {
  309.     void (*activate)(WindowPtr wind, Boolean act);
  310.     void (*update)(WindowPtr wind);
  311.     OSErr (*mouse)(WindowPtr wind, Point where, short modifiers);
  312.     Boolean (*draggable)(WindowPtr wind, Point where, short modifiers);
  313.     OSErr (*key)(WindowPtr wind, unsigned char theChar, unsigned char theKey, short modifiers);
  314.     OSErr (*grow)(WindowPtr wind, Point where);
  315.     OSErr (*zoom)(WindowPtr wind, short zoomDir);
  316.     OSErr (*command)(WindowPtr wind, short menu, short item, short modifiers);
  317.     OSErr (*close)(WindowPtr wind);
  318.     void (*idle)(WindowPtr wind, RgnHandle cursorRgn);
  319. } TDispatch;
  320.  
  321. typedef enum TMsgFieldLabelKind {
  322.     kNoMsgFieldLabel,            /* no message window label for this field */
  323.     kMsgFieldLabelLeft,            /* message window field has label on left */
  324.     kMsgFieldLabelTop            /* message window field has label on top in italics */
  325. } TMsgFieldLabelKind;
  326.  
  327. typedef struct THeader {
  328.     long number;                /* article number */
  329.     long offset;                /* offset in strings of header text */
  330. } THeader;
  331.  
  332. typedef struct TUnread {
  333.     long firstUnread;            /* first unread message */
  334.     long lastUnread;            /* last unread message */
  335.     struct TUnread **next;        /* handle to next entry in list */
  336. } TUnread;
  337.  
  338. typedef struct TGroup {
  339.     long nameOffset;            /* offset in gGroupNames of group name string */
  340.     long firstMess;                /* # of first msg in group */
  341.     long lastMess;                /* # of last msg in group */
  342.     TUnread **unread;            /* handle to list of unread messages for group */
  343.     long numUnread;                /* number of unread articles in group */
  344.     char status;                /* a general purpose status "marker" used in
  345.                                    several contexts */
  346.     Boolean onlyRedrawCount;    /* true to tell LDEF to only redraw the unread
  347.                                    message count */
  348. } TGroup;
  349.  
  350. typedef struct TSubject {
  351.     long subjectOffset;            /* offset in strings block of subject string */
  352.     long authorOffset;            /* offset in strings block of author string */
  353.     long number;                /* article number */
  354.     short threadHeadIndex;        /* index of first article in thread in
  355.                                    subject array. */
  356.     short threadOrdinal;        /* article ordinal in thread (1,2,3,...) */
  357.     short threadLength;            /* total number of articles in thread */
  358.     short nextInThread;            /* index in subject array of next subject 
  359.                                    in this thread, or -1 if none. */
  360.     short partNum;                /* part number, or 0x7fff if not a part */
  361.     short numParts;                /* number of parts, or 0x7fff if not a part */
  362.     Boolean collapsed;            /* true if thread collapsed */
  363.     Boolean read;                /* true if article has been read */
  364.     Boolean incomplete;            /* true if incomplete part of multiple part article */
  365.     Boolean complete;            /* true if part of multiple part article and thread
  366.                                    is now complete (contains all parts, and at least
  367.                                    one part from cache) */
  368.     Boolean inList;                /* true if part of subject window list */
  369.     Boolean drawTriangleFilled;    /* true to tell LDEF to draw triangle filled with 
  370.                                    black. */
  371.     Boolean onlyRedrawTriangle;    /* true to tell LDEF to only redraw the
  372.                                    triangle */
  373.     Boolean onlyRedrawCheck;    /* true to tell LDEF to only redraw the √ */
  374. } TSubject;
  375.  
  376. typedef struct TChild {
  377.     WindowPtr childWindow;        /* pointer to child window */
  378.     struct TChild **next;        /* handle to next entry in list */
  379. } TChild;
  380.  
  381. typedef struct TMsgFieldInfo {
  382.     TEHandle edit;                    /* handle to TextEdit record for field */
  383.     short top;                        /* top coord of field */
  384.     short bottom;                    /* bottom coord of field */
  385.     short nLines;                    /* number of TextEdit lines in field */
  386.     Boolean sepLine;                /* true if field preceded by gray separator line */
  387.     TMsgFieldLabelKind labelKind;    /* kind of label for this field */
  388.     unsigned char label[40];        /* P-format field label, if any */
  389. } TMsgFieldInfo;
  390.  
  391. typedef struct TDialogItemInfo {
  392.     Boolean validChars[256];        /* set of valid printable chars in field */
  393.     Boolean numeric;                /* true if numeric field */
  394.     Boolean returnIsLegal;            /* true if CR is legal in field */
  395.     short popupTypeinItem;            /* item number of partner typein field for popup item,
  396.                                        or 0 if none */
  397.     char keyEquivalent;                /* command key equivalent for button, or 0 if none */
  398.     short maxLength;                /* max length of field */
  399.     char *password;                    /* pointer to password if password field, or nil */
  400.     Boolean readOnly;                /* true if read only scrolling field */
  401.     TEHandle theTE;                    /* textedit handle for scrolling field, or nil
  402.                                        if none */
  403.     ControlHandle vScroll;            /* handle to vertical scroll bar control if scrolling
  404.                                        field, or nil if none */
  405. } TDialogItemInfo;
  406.  
  407. #pragma options align=mac68k
  408. typedef struct TSavedWindPos {
  409.     Boolean valid;                    /* true if valid, else use default pos */
  410.     Boolean zoomed;                    /* true if window zoomed */
  411.     Boolean oldFormat;                /* true if old format (pre-2.0b4): 
  412.                                        userState.topLeft valid,
  413.                                        all other fields not used */
  414.     Rect userState;                    /* saved window user state */
  415. } TSavedWindPos;
  416. #pragma options align=reset
  417.  
  418. typedef struct TWindow {
  419.  
  420.     /* Fields used by all kinds of windows. */
  421.  
  422.     TWindowKind kind;            /* kind of window */
  423.     Boolean windPosValid;        /* true if window position should be saved
  424.                                    and restored */
  425.     Boolean movedSinceLastSave;    /* true if window has been moved or resized
  426.                                    or zoomed since the last time its position
  427.                                    was saved on the document file */
  428.     
  429.     /* Fields used only by group, subject, article, message, and text windows */
  430.     
  431.     short panelHeight;            /* height of panel area */
  432.     
  433.     /* Fields used only by group windows. */
  434.     
  435.     TGroupWindowKind groupKind;    /* kind of group window */
  436.     TGroup **groupArray;        /* handle to group array */
  437.     short numGroups;            /* number of groups */
  438.     
  439.     /* Fields used only by article and subject windows. */
  440.  
  441.     WindowPtr parentWindow;        /* pointer to parent window */
  442.     Boolean windPosLocked;        /* true if window position is locked */
  443.     
  444.     /* Fields used only by group and subject windows. */
  445.     
  446.     ListHandle theList;            /* list handle */
  447.     TChild **childList;            /* handle to linked list of child windows */
  448.     
  449.     /* Fields used only by user group and message windows */
  450.     
  451.     Boolean changed;            /* true if window contents changed */
  452.     AliasHandle alias;            /* handle to alias for saved file if saved, else nil */
  453.     
  454.     /* Fields used only by article, message, and text windows. */
  455.     
  456.     ControlHandle vScroll;        /* handle to vertical scroll bar */
  457.     TEHandle theTE;                /* TextEdit handle */
  458.     
  459.     /* Fields used only by article and message windows. */
  460.     
  461.     Boolean showDetails;        /* true if details shown */
  462.     
  463.     /* Fields used only by user group windows. */
  464.     
  465.     Handle unsubscribed;        /* handle to list of unsubscribed groups */
  466.     Boolean autoFetched;        /* true if autofetched from host */
  467.     short groupNameHCoord;        /* h coord of group name */
  468.     short numUnreadHCoord;        /* h coord of num unread articles */
  469.     Boolean okToCloseIfChanged;    /* true if ok to close window with changes without saving */
  470.     
  471.     /* Fields used only by subject windows. */
  472.     
  473.     TSubject **subjectArray;    /* handle to subject array  */
  474.     short numSubjects;            /* number of subjects in array */
  475.     short numSubjectsInList;    /* number of subjects in list */
  476.     Handle strings;                /* handle to subject and author strings */
  477.     short maxSubjectWidth;        /* width in pixels of longest subject line, or 
  478.                                    0 if not yet computed */
  479.     long firstFetched;            /* article number of first article fetched */
  480.     long groupNameOffset;        /* offset in gGroupNames of group name */
  481.     short parentGroup;            /* index in groupArray of parent group window */
  482.     Boolean authorsShown;        /* true if authors shown */
  483.     short minusSignHCoord;        /* h coord of minus sign */
  484.     short threadCountHCoord;    /* h coord of thread count */
  485.     short checkHCoord;            /* h coord of check mark */
  486.     short authorHCoord;            /* h coord of author */
  487.     short authorWidth;            /* width of author field */
  488.     short subjectHCoord;        /* h coord of subject */
  489.     short autoExpandedThread;    /* index in subject array of first article in thread
  490.                                    which was most recently autoexpanded by a Find or
  491.                                    Find Next command, or -1 if none */
  492.     PolyHandle expandTriangle;    /* handle to expanded triangle polygon */
  493.     PolyHandle collapseTriangle;/* handle to collapsed triangle polygon */
  494.     long **sortByNumber;        /* handle to array of offsets to elements of subject
  495.                                    array sorted by article number */
  496.     
  497.     /* Fields used only by article windows. */
  498.     
  499.     Handle fullText;            /* handle to full article text */
  500.     short maxBodyLineWidth;        /* width in pixels of longest body line, truncated
  501.                                    to 80 * max char width, or 0 if not yet computed */
  502.     short numBodyLines;            /* number of lines in body, or 0 if maxLineWidth = 0 */
  503.     short numSections;            /* number of sections */
  504.     short curSection;            /* current section */
  505.     long **sectionBreaks;        /* handle to array of section breaks, or nil
  506.                                    if none */
  507.     Handle msgId;                /* handle to msgId if opened by id, or nil */
  508.     short parentSubject;        /* index in subjectArray of parent subject window */
  509.     ControlHandle hScroll;        /* handle to horizontal scroll bar, or nil if none */
  510.     Boolean attachedFile;        /* true if article has an attached file */
  511.     
  512.     /* Fields used only by message windows. */
  513.     
  514.     Boolean newsIcon;            /* true if news icon checked */
  515.     Boolean mailIcon;            /* true if mail icon checked */
  516.     Boolean selfIcon;            /* true if self icon checked */
  517.     ControlHandle sendButton;    /* handle to "Send" button control */
  518.     ControlHandle tabCheckbox;    /* handle to tab stops checkbox control */
  519.     ControlHandle wrapCheckbox;    /* handle to wrap checkbox control */
  520.     TEHandle tabField;            /* handle to tab stops field */
  521.     TEHandle quoteStringField;    /* handle to quote string field */
  522.     TEHandle newsgroupsField;    /* handle to "Newsgroups" field */
  523.     TEHandle toField;            /* handle to "To" field */
  524.     TEHandle subjectField;        /* handle to "Subject" field */
  525.     TEHandle ccField;            /* handle to "Cc" field */
  526.     TEHandle bccField;            /* handle to "Bcc" field */
  527.     TEHandle replytoField;        /* handle to "Reply-To" field */
  528.     TEHandle followuptoField;    /* handle to "Followup-To" field */
  529.     TEHandle keywordsField;        /* handle to "Keywords" field */
  530.     TEHandle distributionField;    /* handle to "Distribution" field */
  531.     TEHandle extraNewsField;    /* handle to extra news header lines field */
  532.     TEHandle extraMailField;    /* handle to extra mail header lines field */
  533.     TEHandle signatureField;    /* handle to signature field */
  534.     Handle references;            /* handle to "References" header contents */
  535.     Handle from;                /* handle to "From" header contents for redirected mail msg */
  536.     TMsgFieldInfo **fields;        /* handle to array of field info */
  537.     short numFields;            /* number of fields */
  538.     short firstScrollingField;    /* index if fields array of first scrolling field */
  539.     short curField;                /* index in fields array of current field */
  540.     short labelRight;            /* right coord of header field labels */
  541.     Boolean tabEnabled;            /* true if body tabs currently enabled for this window */
  542.     Boolean wrapOnSend;            /* true to wrap message before sending it */
  543.     short tabStops;                /* current tab stops for this window */
  544.     short optionsPanelHeight;    /* height of options panel */
  545.     
  546.     /* Fields used only by dialog windows. */
  547.     
  548.     Boolean movableModal;        /* true if dialog is movable modal */
  549.     short defaultItem;            /* item number of default button, or 0 if none */
  550.     Boolean defaultOutline;        /* true if default button outlined */
  551.     short cancelItem;            /* item number of cancel button, or 0 if none */
  552.     short curItem;                /* item number of currently active scrolling text field,
  553.                                    or 0 if none */
  554.     TDialogItemInfo    **itemInfo;    /* handle to array of item information */
  555.                                    
  556.     /* Fields used only by text windows. */
  557.     
  558.     void (*drawPanel)(WindowPtr);    /* pointer to panel drawing function, or nil if none */
  559.     
  560. } TWindow;
  561.  
  562. #pragma options align=mac68k
  563. typedef struct TPrefRec {
  564.  
  565.     /* Original 1.0.2 prefs. */
  566.  
  567.     Str255 newsServerName;            /* name of news server */
  568.     Str255 textFont;                /* name of textedit font */
  569.     short textSize;                    /* size of textedit font */
  570.     Str255 listFont;                /* name of list font */
  571.     short listSize;                    /* size of list font */
  572.     Point fullGroupWindowLocn;        /* saved top left full group window position
  573.                                        (defunct as of 2.0b4) */
  574.     Point unused0;                    /* unused (used to be bot right saved full group window pos */
  575.     Point unused1;                    /* unused (used to be stagerring offset) */
  576.     Point statusWindowLocn;            /* saved top left status window position */
  577.     short maxFetch;                    /* max. number of articles to fetch */
  578.     CStr255 ftpNewsrcUsername;        /* username for FTP transfers of newsrc files */
  579.     CStr255 ftpNewsrcHost;            /* host name for FTP transfers of newsrc files */
  580.     CStr255 fullName;                /* user's full name */
  581.     CStr255 organization;            /* user's organization */
  582.     char signature[4096];            /* user's signature */
  583.     Boolean fullGroupListVisible;    /* true if full group list window is visible */
  584.     Boolean unused2;                /* unused (used to be auto zoom windows) */
  585.     Boolean unused3;                /* unused (used to be offset winds from parent) */
  586.     Boolean unused4;                /* unused (used to be most recent first) */
  587.     Str255 mailServerName;            /* mail server name */
  588.     CStr255 emailAddress;            /* user's e-mail address */
  589.     
  590.     /*     Added in 1.2(NU) */
  591.     
  592.     char magicCookie[12];            /* magic cookie */
  593.     char versionString[12];            /* version string - used from version 1.2(NU) through
  594.                                        version 2.0d17. Empty string in version 2.0d18
  595.                                        and later versions. */
  596.     Boolean areYouSureAlert;        /* true to present are you sure alert on postings */
  597.                                    
  598.     /*    Added in 1.3d1 */
  599.     
  600.     Boolean autoFetchNewsrc;        /* auto get/put .newsrc file */
  601.     Boolean unused5;                /* unused (used to be CC self on email replies) */
  602.     
  603.     /*     Added in 1.3d4 */
  604.     
  605.     Boolean showArtHeaders;            /* true to show article headers by default */
  606.     Boolean showAuthors;            /* true to show authors in subject windows */
  607.     Boolean showThreadsCollapsed;    /* true to show threads collapsed by default */
  608.  
  609.     /* Added in 2.0d9 */
  610.     
  611.     Boolean checkForNewGroups;        /* Check for new newsgroups at startup */
  612.     Boolean unused6;                /* unused (used to be killed articles are shown 
  613.                                        but marked as read) */
  614.     unsigned long groupCheckTime;    /* The last time we checked for new groups */
  615.     char ftpNewsrcPassword[32];        /* Password for FTP transfers of newsrc files */
  616.     Boolean saveFtpNewsrcPassword;    /* True to save newsrc FTP password */
  617.     Boolean unused7;                 /* unused (used to be xpand threads with highlighted articles) */
  618.     OSType savedArtCreator;            /* Creator code for owning app of saved articles */
  619.     Str31 savedArtAppName;            /* Name of the app which owns saved articles */
  620.     Str31 DefunctSavedArtDefaultVolName;    /* Default volume to store saved articles (not used in
  621.                                        2.0d41 and later) */
  622.     long DefunctSavedArtDefaultDirID;        /* Default dir id to store saved articles (not used in
  623.                                        2.0d41 and later) */
  624.     short maxGroupNameWidth;        /* max group name width in current list font
  625.                                        and size, or 0 if needs to be recomputed */
  626.     Boolean    useXPAT;                /* use XPAT for searching if available */
  627.     
  628.     /* Added in 2.0d10 */
  629.     
  630.     Boolean savedArtDefaultFolder;    /* true if using default folder for saved articles */
  631.     char ftpNewsrcPath[32];            /* Path for FTP transfers of newsrc files */
  632.     
  633.     /* Added in 2.0d11 */
  634.     
  635.     Boolean addSigSeparatorLine;    /* true to add "-- " separator line before sig */
  636.     
  637.     /* Added in 2.0d12 */
  638.     
  639.     Boolean keypadShortcuts;        /* true if keypad shortcuts enabled */
  640.     Boolean logActionsToFile;        /* true if logging enabled */
  641.     
  642.     /* Added in 2.0d14 */
  643.     
  644.     Boolean batchedGroupCmds;        /* use batched GROUP commands */
  645.     Boolean noNewConnection;        /* don't establish new connection when checking for new articles */
  646.     Boolean noModeReader;            /* don't send MODE READER command */
  647.     
  648.     /* Added in 2.0d16 */
  649.     
  650.     Boolean reZoomWindows;            /* rezoom windows */
  651.     Boolean autoSaveOnQuit;            /* auto save on quit */
  652.     
  653.     /* Added in 2.0d18 */
  654.     
  655.     Boolean replyPost;                /* reply via posting */
  656.     Boolean replyEmail;                /* reply via email */
  657.     Boolean copySelf;                /* send copies to self */
  658.     Boolean showMsgDetails;            /* show message window details */
  659.     Boolean tabEnabled;                /* tabs enabled in message bodys */
  660.     short tabStops;                    /* tab stops */
  661.     char quoteString[11];            /* quote string */
  662.     CStr255 extraNewsHdrLines;        /* extra news header lines */
  663.     CStr255 extraMailHdrLines;        /* extra mail header lines */
  664.     
  665.     /* Added in 2.0d19 */
  666.     
  667.     unsigned long version;            /* version number of NewsWatcher which created this
  668.                                        prefs file, in 'vers' resource format */
  669.     Boolean addSigBlankLine;        /* add blank line before signature */
  670.     
  671.     /* Added in 2.0d21 */
  672.     
  673.     Point prefsLoc;                    /* location of preferences dialog */
  674.     Point unused8;                    /* unused (used to be location of about box dialog) */
  675.     Point hostLoc;                    /* location of remote host dialog */
  676.     Point servErrLoc;                /* location of news server error dialog */
  677.     Point searchLoc;                /* location of search dialog */
  678.     Point unused9;                    /* unused (used to be location of server info dialog) */
  679.     Point delGroupsLoc;                /* location of deleted groups dialog */
  680.     
  681.     /* Added in 2.0d24 */
  682.     
  683.     Boolean unused10;                /* unused (used to be fetch oldest/newest option */
  684.     Boolean wrapOnSend;                /* true to wrap messages before sending them */
  685.     
  686.     /* Added in 2.0d25. These prefs fields are defunct as of 2.0b17. They are
  687.        replaced by the new ftpHelperInfo field. */
  688.     
  689.     OSType ftpHelper;                /* Creator code for FTP helper program */
  690.     Str31 ftpHelperName;            /* Name of FTP helper program */
  691.     
  692.     /* Added in 2.0d26 */
  693.     
  694.     char authUsername[32];            /* authorization username */
  695.     char authPassword[32];            /* authorization password */
  696.     Boolean authSavePassword;        /* true to save authorization password */
  697.     Boolean authAtStartup;            /* true to authorize at startup, false to
  698.                                        authorize only when requested */
  699.     Point authLoc;                    /* location of authorization dialog */
  700.     
  701.     /* Added in 2.0d27 */
  702.     
  703.     Boolean authPrivateGroups;        /* true if private groups */
  704.     
  705.     /* Added in 2.0d39 */
  706.     
  707.     Boolean unused11;                /* unused (used to be saved article auto save option) */
  708.     
  709.     /* Added in 2.0d41 */
  710.     
  711.     Boolean savedMsgDefaultFolder;            /* true if using default folder for 
  712.                                                saved messages */
  713.     AliasHandle savedMsgDefaultFolderAlias;    /* reserved for handle to default 
  714.                                                saved message folder alias */
  715.     Boolean unused12;                        /* unused (used to be saved msg auto save option */
  716.     Boolean savedMsgDelAfterSend;            /* true to delete saved messages after sending them */
  717.     AliasHandle savedArtDefaultFolderAlias;    /* reserved for handle to default saved article
  718.                                                folder alias */
  719.     Boolean savedBinDefaultFolder;            /* true if using default folder for saved 
  720.                                                binaries */
  721.     AliasHandle savedBinDefaultFolderAlias;    /* reserved for handle to default saved binaries
  722.                                                folder alias */
  723.     OSType hqxHelper;                        /* creator code for BinHex helper program */
  724.     Str31 hqxHelperName;                    /* name of BinHex helper program */
  725.     
  726.     /* Added in 2.0d44 */
  727.     
  728.     OSType uuHelper;                    /* creator code for uudecode helper program */
  729.     Str31 uuHelperName;                    /* name of uudecode helper program */
  730.     Boolean keyboardShortcuts;            /* main keyboard shortcuts */
  731.     
  732.     /* Added in 2.0d48 */
  733.     
  734.     Boolean reuseArticleWinds;            /* reuse article windows */
  735.     Point autoFetchNewsrcLocn;            /* saved top left auto-fetched newsrc
  736.                                            window position (defunct as of 2.0b4) */
  737.  
  738.     /* Added in 2.0b4 */
  739.     
  740.     Boolean dontCoverFinderIcons;        /* don't cover Finder icons */
  741.     Boolean saveThreadsToSeparateFiles;    /* save threads to separate files */
  742.     Boolean appendIfFileAlreadyExists;    /* append if file already exists */
  743.     Boolean saveEncodedText;            /* save encoded text */
  744.     Boolean subjectWindPosLocked;        /* true if subject window pos locked */
  745.     Rect subjectWindLocn;                /* saved locked subject window pos */
  746.     Boolean articleWindPosLocked;        /* true if article window pos locked */
  747.     Rect articleWindLocn;                /* saved locked article window pos */
  748.     TSavedWindPos fullGroupWindPos;        /* saved full group window position */
  749.     TSavedWindPos autoFetchWindPos;        /* saved autofetch window position */
  750.     
  751.     /* Added in 2.0b12 */
  752.     
  753.     Boolean returnToSubjectWindow;        /* return to subject window at end of thread */
  754.     
  755.     /* Added in 2.0b14 */
  756.     
  757.     Boolean beepAtEndOfGroup;            /* beep at end of group */
  758.     Point findLoc;                        /* location of find dialog */
  759.     
  760.     /* Added in 2.0b15 */
  761.     
  762.     Boolean startFindAtBeginning;        /* true to start Find commmands at
  763.                                            beginning of window */
  764.     Boolean savedUGLDefaultFolder;        /* true if useing default folder for
  765.                                            saved user group lists */
  766.     AliasHandle savedUGLDefaultFolderAlias;    /* reserved for handle to default
  767.                                                saved user group list folder alias */
  768.     Point waitForDNRLoc;                /* location of wait for DNR dialog */
  769.     
  770.     /* Added in 2.0b17 */
  771.     
  772.     TURLHelperInfo ftpHelperInfo;        /* ftp helper program info */
  773.     TURLHelperInfo httpHelperInfo;        /* http helper program info */
  774.     TURLHelperInfo gopherHelperInfo;    /* gopher helper program info */
  775.     TURLHelperInfo waisHelperInfo;        /* wais helper program info */
  776.     TURLHelperInfo telnetHelperInfo;    /* telnet helper program info */
  777.     TURLHelperInfo tn3270HelperInfo;    /* tn3270 helper program info */
  778.     TURLHelperInfo fingerHelperInfo;    /* finger helper program info */
  779.     TURLHelperInfo whoisHelperInfo;        /* whois helper program info */
  780.     
  781.     /* Added in 2.0b21 */
  782.     
  783.     Str255 printingFont;                /* name of printing font */
  784.     short printingSize;                    /* size of printing font */
  785.     
  786.     /* Added in 2.0b22 */
  787.     
  788.     Boolean useInternetConfig;            /* true to use Internet Config */
  789.  
  790.     char    fill[157];                /* for future expansion */
  791.     
  792. } TPrefRec, *TPrefPtr;
  793. #pragma options align=reset
  794.  
  795.  
  796.  
  797. /* Global variables. */
  798.  
  799. extern TDispatch gDispatch[kNumWindowKind];        /* dispatch table */
  800.  
  801. extern short gNumGroups;            /* number of newsgroups */
  802. extern TGroup **gFullGroupArray;    /* handle to full group array */
  803. extern Handle gGroupNames;            /* handle to group name strings */
  804. extern WindowPtr gFullGroupWindow;    /* pointer to full group list window */
  805. extern Boolean gFullGroupListDirty;    /* true if full group list dirty */
  806. extern Boolean gMustDoZoomOnShowFullGroupList;    /* true if full group list needs zooming */
  807.  
  808. extern TPrefRec gPrefs;                /* preferences */
  809.  
  810. extern CStr255 gAutoFetchHost;        /* autofetch host */
  811. extern CStr255 gAutoFetchUsername;    /* autofetch username */
  812. extern char gAutoFetchPassword[32];    /* autofetch password */
  813. extern char gAutoFetchPath[32];        /* autofetch path */
  814.  
  815. extern Boolean gDone;                /* flag set true upon program termination */
  816. extern Boolean gCancel;                /* flag set when user cancels an action */
  817. extern Boolean gStartupOK;            /* true if no errors during startup */
  818. extern Boolean gStartingUp;            /* true during startup */
  819. extern Boolean gPrefsFileFoundAtStartup;    /* true if prefs file found during startup */
  820. extern Boolean gLongOperation;        /* true during long operations */
  821. extern Boolean gInDialog;            /* true while in dialog */
  822. extern Boolean gInBackground;        /* background/foreground flag */
  823. extern Boolean gAEServer;            /* true while responding to Apple event */
  824. extern DialogPtr gMyCurDialog;        /* pointer to NewsWatcher's current dialog
  825.                                        window, or nil if none */
  826. extern Rect gDesktopExtent;            /* desktop extent */
  827. extern Cursor gIBeamCurs;            /* ibeam cursor */
  828. extern Cursor gWatchCurs;            /* watch cursor */
  829.  
  830. extern Boolean gHaveDragMgr;        /* true if Drag Manager is available */
  831. extern OSErr (*gDragPostProcessor)(void);    /* pointer to drag and drop post-processing
  832.                                                function, or nil if none */
  833. extern OSErr gDragErr;                /* Drag Manager handler error code. */
  834.  
  835. extern EventRecord gCurEvent;        /* current event being handled */
  836. extern EventRecord gPrevEvent;        /* previous event */
  837.  
  838. extern Boolean gHaveTEOutlineHilite;    /* true if TE outline hilight feature
  839.                                            is available */
  840.                                            
  841. extern CStr255 gFindPattern;            /* pattern for Find and Find Again commands */